/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.viajaconmigo.i18n.impl;

import com.viajaconmigo.model.Aficion;
import com.viajaconmigo.model.Idioma;
import com.viajaconmigo.model.NivelIdioma;
import com.viajaconmigo.model.Pais;
import com.viajaconmigo.model.PlanEco;
import com.viajaconmigo.model.PlanOcio;
import com.viajaconmigo.repository.i18n.AficionTradDAO;
import com.viajaconmigo.repository.i18n.I18nDAO;
import com.viajaconmigo.repository.i18n.IdiomaTradDAO;
import com.viajaconmigo.repository.i18n.NivelIdiomaTradDAO;
import com.viajaconmigo.repository.i18n.PaisTradDAO;
import com.viajaconmigo.repository.i18n.PlanEcoTradDAO;
import com.viajaconmigo.repository.i18n.PlanOcioTradDAO;
import java.util.HashMap;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;

/**
 * Pool que contiene la correspondencia entre Clases del Modelo y DAOs donde obtener
 * sus traducciones
 * 
 * @author Jose Manuel
 */

@Named
public class I18nPool {
    
    @Inject
    private DAOHolder daoHolder;
    
    //private HashMap<Class,Class> poolClases;
    private HashMap<Class,I18nDAO> poolDAO;
    
    /**
     * Construye el pool de Clases-DAO
     */
    /* TODO: La correspondencia debe obtenerse de algún recurso (properties, config, etc).*/
    @PostConstruct
    public void init() {     
        poolDAO = new HashMap<>();
        poolDAO.put(Aficion.class, daoHolder.getAficionTradDAO());
        poolDAO.put(Idioma.class, daoHolder.getIdiomaTradDAO());
        poolDAO.put(NivelIdioma.class, daoHolder.getNivelIdiomaTradDAO());
        poolDAO.put(Pais.class, daoHolder.getPaisTradDAO());
        poolDAO.put(PlanEco.class, daoHolder.getPlanEcoTradDAO());
        poolDAO.put(PlanOcio.class, daoHolder.getPlanOcioTradDAO());
    }
        
    public HashMap<Class, I18nDAO> getPoolDAO() {
        return poolDAO;
    }

    public void setPoolDAO(HashMap<Class, I18nDAO> poolDAO) {
        this.poolDAO = poolDAO;
    }

    @Named
    private static class DAOHolder {
        
        @Inject @AficionTradDAO      
        private I18nDAO aficionTradDAO;
        
        @Inject @IdiomaTradDAO
        private I18nDAO idiomaTradDAO;
        
        @Inject @NivelIdiomaTradDAO
        private I18nDAO nivelIdiomaTradDAO;
        
        @Inject @PaisTradDAO
        private I18nDAO paisTradDAO;
        
        @Inject @PlanEcoTradDAO
        private I18nDAO PlanEcoTradDAO;
        
        @Inject @PlanOcioTradDAO
        private I18nDAO PlanOcioTradDAO;
        
        public DAOHolder() {
            super();
        }

        public I18nDAO getAficionTradDAO() {
            return aficionTradDAO;
        }

        public I18nDAO getIdiomaTradDAO() {
            return idiomaTradDAO;
        }

        public I18nDAO getNivelIdiomaTradDAO() {
            return nivelIdiomaTradDAO;
        }

        public I18nDAO getPaisTradDAO() {
            return paisTradDAO;
        }

        public I18nDAO getPlanEcoTradDAO() {
            return PlanEcoTradDAO;
        }

        public I18nDAO getPlanOcioTradDAO() {
            return PlanOcioTradDAO;
        }
        
    }
}
